package it.univaq.mwt.arssa.presentation.backoffice.ferie;

import it.univaq.mwt.arssa.business.ArssaBusinessFactory;
import it.univaq.mwt.arssa.business.FerieService;
import it.univaq.mwt.arssa.business.model.TipoFerie;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.MappingDispatchAction;

public class TipoFerieAction extends MappingDispatchAction {

	public ActionForward adminvisualizzatipoferie(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
				
		ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();
		FerieService ferieService = factory.getFerieService();	
		
		//setto i dati per far visualizzare la lista dei tipi di ferie dei dipendenti
		List<TipoFerie> tipoferie = ferieService.cercaTipoFerie(); // popolo la lista dei tipi di ferie
		request.setAttribute("tipoferie", tipoferie);
				
		return mapping.findForward("admin.visualizza.tipoferie");

	}
	
	public ActionForward activeadminmodificatipoferie(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
	throws Exception {
		
		ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();
		FerieService ferieService = factory.getFerieService();
		
		int id = Integer.parseInt(request.getParameter("id"));
		TipoFerie tipoferie = ferieService.cercaTipoFerie(id);
		
		TipoFerieForm tipoFerieForm = (TipoFerieForm) form;
		BeanUtils.copyProperties(tipoFerieForm, tipoferie); // copio tutti i parametri nella form
				
		request.setAttribute("titoloForm", "Modifica Tipo Ferie"); // setto il titolo della form
		request.setAttribute("action", "/admin/ferie/modificatipoferie"); // setto la action	
		request.setAttribute("tipoferie", ferieService.cercaTipoFerie());
		request.setAttribute("id", id);		
							
		saveToken(request);
		
		return mapping.findForward("admin.tipoferie.form"); 
	}
	
	public ActionForward adminmodificatipoferie(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
	throws Exception {
		
		ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();
		FerieService ferieService = factory.getFerieService();
				
		request.setAttribute("titoloForm", "Modifica un tipo di ruolo"); // setto il titolo della form 
		
		if (!isTokenValid(request, false)) {
			// setto gli errori
			request.setAttribute("errore", 1); // setto la tipologia di errore/successo
			request.setAttribute("msg", "Errore double submit"); // setto il messaggio
			return mapping.findForward("admin.tipoferie.result");
		}
				
		TipoFerieForm tipoFerieForm = (TipoFerieForm) form;
		int id = tipoFerieForm.getId();
		String nome = tipoFerieForm.getTipo();

		TipoFerie tipoFerie = new TipoFerie(id, nome);

		//modifico il tipo ferie
		ferieService.modificaTipoFerie(tipoFerie);
		
		// se arrivo qui,non ho ricevuto errori 
		request.setAttribute("errore", 0); // setto la tipologia di successo
		request.setAttribute("msg", "Modifica avvenuta con successo"); // setto il messaggio
		request.setAttribute("tipoferie", ferieService.cercaTipoFerie());
		
		resetToken(request);
		
		return mapping.findForward("admin.tipoferie.result");
	}
	
	public ActionForward activeadmineliminatipoferie(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();
		FerieService ferieService = factory.getFerieService();
		
		int id = Integer.parseInt(request.getParameter("id"));
		TipoFerie tipoferie = ferieService.cercaTipoFerie(id);
		
		request.setAttribute("id", id);
		request.setAttribute("tipoferie", tipoferie);
		request.setAttribute("titoloForm", "Eliminare il seguente tipo?"); // setto il titolo della form
		request.setAttribute("action", "/admin/ferie/eliminatipoferie"); // setto la action	
		
		saveToken(request);
		
		return mapping.findForward("admin.elimina.tipoferie.form");
		
	}
	
	public ActionForward admineliminatipoferie(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();
		FerieService ferieService = factory.getFerieService();
						
		int id = Integer.parseInt(request.getParameter("id"));		
		ferieService.eliminaTipoFerie(id);	
		
		// se arrivo qui,non ho ricevuto errori 
		request.setAttribute("errore", 0); // setto la tipologia di successo
		request.setAttribute("msg", "Eliminazione avvenuta con successo"); // setto il messaggio
		request.setAttribute("tipoferie", ferieService.cercaTipoFerie());
		
		resetToken(request);
		
		return mapping.findForward("admin.tipoferie.result");
		
	}
	
	public ActionForward activeadmininseriscitipoferie(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
	throws Exception {
		
		ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();
		FerieService ferieService = factory.getFerieService();
		
		request.setAttribute("titoloForm", "Inserisci Tipo Ferie"); // setto il titolo della form
		request.setAttribute("action", "/admin/ferie/inseriscitipoferie"); // setto la action	
		request.setAttribute("tipoferie", ferieService.cercaTipoFerie()); // popolo la tabella dei tipi di ferie
						
		saveToken(request);
		
		return mapping.findForward("admin.tipoferie.form"); 
	}
	
	public ActionForward admininseriscitipoferie(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
	throws Exception {
		
		ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();
		FerieService ferieService = factory.getFerieService();
		
		request.setAttribute("titoloForm", "Inserisci Tipo Ferie"); // setto il titolo della form
		request.setAttribute("action", "/admin/ferie/inseriscitipoferie"); // setto la action	
		request.setAttribute("tipoferie", ferieService.cercaTipoFerie());
				
		/* Controllo il double submit */
		if (!isTokenValid(request, false)) {
			// setto gli errori
			request.setAttribute("errore", 1); // setto la tipologia di errore/successo
			request.setAttribute("msg", "Errore double submit"); // setto il messaggio
			return mapping.findForward("admin.tipoferie.result");
		}
		
		/*
		 *  Controllo tutti gli errori 
		 */
		TipoFerieForm tipoFerieForm = (TipoFerieForm) form;
		String nome = tipoFerieForm.getTipo();
				
		if(ferieService.verificaTipoFerie(nome)){
			request.setAttribute("erroreDuplicazione", 1);
			request.setAttribute("descrizioneDuplicazione", "Tipo gi&agrave; presente.");
			return mapping.findForward("admin.tipoferie.form");
		}
				
		// Inserisco nel db il nuovo tipo ferie 
		TipoFerie tipoFerieInserimento = new TipoFerie(0, nome);
		ferieService.inserisciTipoFerie(tipoFerieInserimento);
		
		// se arrivo qui,non ho ricevuto errori 
		request.setAttribute("errore", 0); // setto la tipologia di successo
		request.setAttribute("msg", "Inserimento avvenuto con successo"); // setto il messaggio
		request.setAttribute("tipoferie", ferieService.cercaTipoFerie());
		
		resetToken(request);
		
		return mapping.findForward("admin.tipoferie.result");
	}

		
	
}
